const data = [
  { 'id': '29', 'pid': '', 'name': '总裁办' },
  { 'id': '2c', 'pid': '', 'name': '财务部' },
  { 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
  { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
  { 'id': 'd2', 'pid': '', 'name': '技术部' },
  { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' },
  { 'id': 'e9', 'pid': 'd3', 'name': 'Java实验室' }
]

function todo(arr, pid) {
  // 1.新建一个数组，装数据
  const newArr = []
  // 2.循环接收的数组
  arr.forEach(item => {
    // 满足item.pid===pid  表示是一级
    if (item.pid === pid) {
      // 获取二级和空
      const child = todo(arr, item.id)
      if (child.length) {
        // 3.存在有二级，那就需要往一级中添加二级
        item.children = child
      }
      // 添加的是没有父级的一级
      newArr.push(item)
    }
  })
  return newArr
}

console.log(todo(data, ''))
